const path = require('path');
const fs = require('fs');

const fileController = {
  uploadFile: async (ctx) => {
    // 打印文件的相关信息来检查上传的内容
    const file = ctx.request.files?.file;
  
   
  
    if (file) {
      const { originalFilename:name, _writeStream: tempPath, mimetype:type } = file; // 获取上传文件的名称、临时路径和类型
  
      const targetPath = path.join(ctx.state.currentDir, name); // 目标文件路径
    
      // 将上传的文件从临时路径移动到目标路径
      fs.renameSync(tempPath.path, targetPath);
  
      ctx.body = { status: 0, msg: '文件上传成功', fileName: name };
    } else {
      ctx.status = 400;
      ctx.body = { status: 1, msg: '没有上传文件' };
    }
  },

  downloadFile: async (ctx) => {
    const { filename } = ctx.params;
    const filePath = path.join(ctx.state.currentDir, filename);
    if (fs.existsSync(filePath)) {
      ctx.body = fs.readFileSync(filePath);
      ctx.set('Content-Disposition', `attachment; filename=${filename}`);
    } else {
      ctx.status = 404;
      ctx.body = { status: 1, msg: '文件不存在' };
    }
  },

/*   deleteFile: async (ctx) => {
    const { filename } = ctx.params;
    const filePath = path.join(ctx.state.currentDir, filename);
    if (fs.existsSync(filePath)) {
      fs.unlinkSync(filePath);
      ctx.body = { status: 0, msg: '文件删除成功' };
    } else {
      ctx.status = 404;
      ctx.body = { status: 1, msg: '文件不存在' };
    }
  }, */

  deleteFile:async (ctx) => {
    const { filename:itemName } = ctx.params;  // 从 URL 参数中获取文件或目录名
   
    console.log(ctx.state.currentDir,'111111111')
    const itemPath = path.join(ctx.state.currentDir, itemName);  // 拼接完整路径
  
    if (fs.existsSync(itemPath)) {
      try {
        const stat = fs.statSync(itemPath);  // 获取文件或目录的状态
  
        if (stat.isFile()) {
          // 删除文件
          fs.unlinkSync(itemPath);
          ctx.body = { status: 0, msg: '文件删除成功' };
        } else if (stat.isDirectory()) {
          // 删除目录及其所有内容
          fs.rmSync(itemPath, { recursive: true });
          ctx.body = { status: 0, msg: '目录及其所有内容删除成功' };
        }
      } catch (err) {
        console.error('删除操作时出错:', err);
        ctx.status = 500;
        ctx.body = { status: 1, msg: '删除操作失败' };
      }
    } else {
      ctx.status = 404;
      ctx.body = { status: 1, msg: '文件或目录不存在' };
    }
  },


  renameFile: async (ctx) => {
    const { oldName, newName } = ctx.request.body;
    const oldPath = path.join(ctx.state.currentDir, oldName);
    const newPath = path.join(ctx.state.currentDir, newName);
  
    if (fs.existsSync(oldPath)) {
      const stat = fs.statSync(oldPath);
  
      try {
        // 判断是文件还是目录
        if (stat.isFile()) {
          fs.renameSync(oldPath, newPath);
          ctx.body = { status: 0, msg: `文件 "${oldName}" 重命名成功为 "${newName}"` };
        } else if (stat.isDirectory()) {
          fs.renameSync(oldPath, newPath);
          ctx.body = { status: 0, msg: `目录 "${oldName}" 重命名成功为 "${newName}"` };
        }
      } catch (err) {
        console.error('重命名失败:', err);
        ctx.status = 500;
        ctx.body = { status: 1, msg: '重命名失败' };
      }
    } else {
      ctx.status = 404;
      ctx.body = { status: 1, msg: '文件或目录不存在' };
    }
  }
  
};

module.exports = fileController;
